﻿using AutoMapper;
using wwl.Contract.Dtos.Common;
using wwl.Domain.Entities.Common;

namespace wwl.Application.Mappings
{
  /// <summary>
  /// AutoMapper 通用映射配置类（应用层）
  /// 定义领域层与契约层之间公共对象的映射规则，如基础实体与基础DTO、分页结果的通用转换
  /// 继承 AutoMapper 的 <see cref="Profile"/> 类，集中管理可复用的映射配置，避免重复定义
  /// </summary>
  public class CommonProfile : Profile
  {
    /// <summary>
    /// 初始化通用映射规则
    /// </summary>
    public CommonProfile()
    {
      // 配置领域基础实体到契约层基础DTO的映射
      // 自动映射 BaseEntity 与 BaseDto 中名称、类型一致的属性（如 Id、CreatedTime、UpdatedTime 等）
      CreateMap<BaseEntity, BaseDto>();

      // 配置泛型分页结果的映射（领域层分页结果 → 契约层分页结果）
      // 使用自定义转换器 PagedResultConverter<,> 处理泛型类型的转换，支持任意实体类型的分页结果映射
      CreateMap(typeof(PagedResult<>), typeof(PagedResult<>))
          .ConvertUsing(typeof(PagedResultConverter<,>));
    }
  }
}